const prefix = 'tabs-shotcus';

/* 主要是构建 tabs-shotcuts的*/
function createTabsShortcus(key,_this) {
    // 如果是缓存里面已经存在这个，则不管，否则则需要创建节点
    $('.tabs-shortcus').find('.current').removeClass('current');
    $(_this).parent('li').addClass('current');
    if (contains(prefix, key)) {
        // 如果是存在的话，就需要更改了
        updateCurrent(key);
        return;
    } else {
        put(prefix, key);
        var html = createTabsShortcusItem(key);
        $('.tabs-shortcus ul').append(html);
    }
}

function init() {
    var itemArr = sessionStorage.getItem(prefix);
    if (itemArr == null){
        return;
    }
    itemArr = JSON.parse(itemArr);
    for (var i = 0 ; i < itemArr.length;i++){
        var item = itemArr[i];
        var html = createTabsShortcusItem(item);
        $('.tabs-shortcus ul').append(html);
    }
}


function createTabsShortcusItem(key) {
    var current = key.current?'current':'';
    var html =
        '<li class="fl hvr-icon-buzz '+current+'">' +
        '<i class="' + key.icon + '"></i>' +
        '<a data-pjax href="' + key.key + '">' + key.name + '</a>' +
        '<i class="fa fa-times hvr-icon"></i>' +
        '</li>'
    return html;
}

function getCurrent() {
    var itemArr = sessionStorage.getItem(prefix);
    if (itemArr == null){
        return;
    }
    itemArr = JSON.parse(itemArr);
    for (var i = 0 ; i < itemArr.length;i++){
        var item = itemArr[i];
        if (item.current){
            return item.key;
        }
    }
}


function updateCurrent(key) {
    var itemArr = sessionStorage.getItem(prefix);
    if (itemArr == null){
        return;
    }
    itemArr = JSON.parse(itemArr);
    for (var i = 0 ; i < itemArr.length;i++){
        var item = itemArr[i];
        if (item.current){
            item.current = false;
            // 把原先的 class 为item的取消
            itemArr.splice(i,1,item);
        }
        if (item.key == key.key){
            item.current = true;
            // 更新最新的current
            itemArr.splice(i,1,item);
        }
    }
}


















/*
* 这个里面将使用sessionStorage 来进行临时的缓存，如果断开session或者在浏览器重开一个tab页将失效
* 数据结构为：
*       item：[{key:key,……},{key:key,……},{key:key,……}]
*       item：为统一项目模块
*       json数组中的key才是每一项的key，这个key用来识别具体的项
*/

/**
 * @param item 缓存用于那个模块，例如 tab-shotcus
 * @param value 必须是个json字符串
 */
function put(item,value) {
    syso('put',item);
    var valuesArray = sessionStorage.getItem(item);
    valuesArray = JSON.parse(valuesArray);
    // 这个是首先初始化 以 item为key的缓存
    if (valuesArray == null){
        tempValue = [];
        tempValue.push(value)
        sessionStorage.setItem(item,JSON.stringify(tempValue));
        syso('put',item);
        return;
    }
    if (contains(item,value)){
        update(item,value)
        syso('put',item);
        return;
    }else{
        valuesArray.push(value);
        sessionStorage.setItem(item,JSON.stringify(valuesArray));
        syso('put',item);
        return;
    }
}

/** 获取制定项目，制定key的value，返回的是一个json结构的数据
 * @param item 项目
 * @param key map的key
 */
function get(item,key) {
    var value =  contains(item,key);
    syso('get',item);
    return value;
}

/** 获取一个模块的所有的条目
 * @param item
 * @returns {any}
 */
function getItem(item) {
    var itemArray = sessionStorage.getItem(item);
    return JSON.parse(itemArray);
}

/**
 * 这个是依据item找到对应的模块，然后以及value里面的key来找到具体的项进行删除
 * @param item
 * @param key
 */
function remove(item,key) {
    var valuesArray = sessionStorage.getItem(item);
    valuesArray = JSON.parse(valuesArray);
    for (var i = 0 ; i < valuesArray.length;i++){
        var value = valuesArray[i];
        if (value.key == key.key){
            valuesArray.splice(i,1);
        }
    }
    sessionStorage.setItem(item,JSON.stringify(valuesArray));
    syso('remove',item);
}

/**
 * 这个是删除整个模块的缓存的
 */
function removeAllItem(item) {
    sessionStorage.removeItem(item);
    syso('removeAllItem',item);
}


function contains(item,key) {
    syso('contains',item);
    var valuesArray = sessionStorage.getItem(item);
    if (valuesArray == null){
        return false;
    }
    valuesArray = JSON.parse(valuesArray);
    for (var i = 0 ; i < valuesArray.length;i++){
        var value = valuesArray[i];
        if (value.key == key.key){
          return value;
        }
    }
    return null;
}

/**
 * 更新条目
 * @param item
 * @param key
 */
function update(item,key) {
    var valuesArray = sessionStorage.getItem(item);
    valuesArray = JSON.parse(valuesArray);
    for (var i = 0 ; i < valuesArray.length;i++){
        var value = valuesArray[i];
        if (value.key == key.key){
            valuesArray.splice(i,1,key);
        }
    }
    sessionStorage.setItem(item,JSON.stringify(valuesArray));
    syso('update',item);
}


function syso(func,item) {
    var valuesArray = sessionStorage.getItem(item);
    valuesArray = JSON.parse(valuesArray);
    if (valuesArray == null){
        console.log(func,null);
        return;
    }
    for (var i = 0 ; i < valuesArray.length;i++){
        var value = valuesArray[i];
        console.log(func,value);
    }
}